/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.apache.tomcat.util.http.mapper;

import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.CallerUtils;
import org.apache.tomcat.util.buf.MessageBytes;

import java.util.Arrays;

/**
 * Mapping data.
 *
 * @author Remy Maucherat
 */
public class MappingData {

    private final static Log log = LogFactory.getLog(MappingData.class);

    public MappingData() {
        log.info("MappingData的无参构造器,Caller-->" + CallerUtils.getCaller(5));
    }

    public Object host = null;
    public Object context = null;
    //
    public int contextSlashCount = 0;
    public Object[] contexts = null;
    public Object wrapper = null;
    public boolean jspWildCard = false;

    public MessageBytes contextPath = MessageBytes.newInstance();
    public MessageBytes requestPath = MessageBytes.newInstance();
    public MessageBytes wrapperPath = MessageBytes.newInstance();
    public MessageBytes pathInfo = MessageBytes.newInstance();

    public MessageBytes redirectPath = MessageBytes.newInstance();

    public void recycle() {
        host = null;
        context = null;
        contextSlashCount = 0;
        contexts = null;
        wrapper = null;
        jspWildCard = false;
        contextPath.recycle();
        requestPath.recycle();
        wrapperPath.recycle();
        pathInfo.recycle();
        redirectPath.recycle();
    }

    @Override
    public String toString() {
        return "MappingData{" + "\n" +
                "host=" + host + "\n" +
                "context=" + context + "\n" +
                "contextSlashCount=" + contextSlashCount + "\n" +
                "contexts=" + Arrays.toString(contexts) + "\n" +
                "wrapper=" + wrapper + "\n" +
                "jspWildCard=" + jspWildCard + "\n" +
                "contextPath=" + contextPath + "\n" +
                "requestPath=" + requestPath + "\n" +
                "wrapperPath=" + wrapperPath + "\n" +
                "pathInfo=" + pathInfo + "\n" +
                "redirectPath=" + redirectPath + "\n" +
                '}';
    }
}
